\chapter[Coding and Cryptography \\ \textnormal{\emph{Lectured in Lent \oldstylenums{2023} by \textsc{Prof.\ S.\ Martin}}}]{Coding and Cryptography}
\emph{\Large Lectured in Lent \oldstylenums{2023} by \textsc{Prof.\ S.\ Martin}}

Coding theory allows us to mathematically reason about methods of communication.
The theory is largely broken into two parts: noiseless coding and noisy coding.

Noiseless codes describe ways to compress data into less space.
Such schemes have been in use since at least the time of the Ancient Greeks, who used torches placed upon hilltops to concisely convey Greek letters over a long distance.
We explore some examples of noiseless codes, and prove theoretical results about how efficiently they can be expected to encode data from a variety of sources.

Noisy coding aims to detect, or possibly correct, errors that may have been introduced while transmitting data across a noisy channel.
An example of such a code is the International Standard Book Number: it detects any digit typed incorrectly, and any transposition of two adjacent digits.
We investigate how reliably channels can transmit data, and at what rate.
In practice, noiseless and noisy codes are combined to transmit data across a noisy channel with high reliability and efficiency.

In addition to transmitting data reliably, we may also wish to transmit our message securely.
This leads to the study of cryptography.
There are several possible aims that a cryptographic cipher might try to achieve, for example ensuring that a message was not read or tampered with, or `signing' a message to authenticate that it originated from a particular sender.
These concepts form the basis of modern internet security.

\subfile{../../ii/cc/main.tex}
